J’ai ici appliqué les algorithmes Dynamic Time Warping (DTW) qui permettent de calculer des distances entre deux séries temporelles qui n’ont pas la même longueur. Je pense que ça ne s’adapte pas vraiment dans noter cas mais je voulais tester. L’idée de cet algorithme est de regarder les similarités entre les séries temporelles en prenant en compte les éventuels décalages temporels (i.e. : \(X_t\) et \(X_{t-1}\) représente la même série, juste décalée dans le temps, non pris en compte par distance euclidienne) et les différences de longueur (deux coureurs qui courent de la même façon mais pas à la même vitesse). En plus ça n’a pas trop l’air de marcher puisqu’il faut que les deux séries soient de même longueur j’ai l’impression
modeles <- ts(read.csv("../../data/modeles.csv", sep=";")[,-1],
start = 2011,frequency = 12)
data <- readRDS("../../data/donnes_cam.RDS")
data[,"Indicateur synthétique"] <- scale(data[,"Indicateur synthétique"] )
data_lag <- lag(data, -1)
library(dtw)
distance_brut <- sapply(1:ncol(modeles), function(i){
dtw((modeles[,i]),
window(data[,"ind_synt_brut"], start = start(modeles), end = end(modeles)),keep=TRUE)$distance
}
)
distance_cvs <- sapply(1:ncol(modeles), function(i){
dtw((modeles[,i]),
window(data[,"Indicateur synthétique"], start = start(modeles), end = end(modeles)),keep=TRUE)$distance
}
)
data.frame(distance_brut, distance_cvs,
row.names = colnames(modeles))
## distance_brut distance_cvs
## reg_log_rmsw_z 140.3115 143.1465
## reg_log_rmsw_lf 133.4384 137.4707
## reg_log_nrmsw_z 140.7268 143.3803
## reg_log_nrmsw_lf 146.6047 148.4010
## reg_prob_rmsw_z 133.0967 137.7387
## reg_prob_rmsw_lf 133.4384 137.4707
## reg_prob_nrmsw_z 134.6974 138.6569
## reg_prob_nrmsw_lf 135.7914 138.9965
Notre indicateur n’est pas forcément celui qui minimise la distance mais toutes les distances sont proches : on voit en fait que tous les indicateurs sont proches.
Voir : http://dtw.r-forge.r-project.org
https://en.wikipedia.org/wiki/Dynamic_time_warping
https://towardsdatascience.com/dynamic-time-warping-3933f25fcdd
Bilan : je propose de ne pas en parler.
Quand on regarde nos indicateurs de sentiment bruts, il est clair qu’il y a des différences en niveau. Ce qui est étonnant c’est que pour la majorité des indicateurs on a toujours des tweets qui sont globalement positifs (ici c’est bien entre -1 et 1).
AQLTools::hc_stocks(2*(modeles)-1,digits = 2)
En revanche quand on renormalise toutes les séries sont extrêmement proches, on retrouve ce qu’on a vu dans la partie précédente. Je trouve que ça milite pour renormaliser les séries : la moyenne et l’écart-type de l’indicateur Camme n’a pas de sens (série calculée à partir des soldes d’opinion renormalisés, on force l’indicateur à être de moyenne 100 et d’écart-type 10) et nos différents modèles représentent les mêmes phénomènes économiques. Si vous préférez on peut toujours faire une moyenne de 100 et d’écart-type 10 pour tout.
AQLTools::hc_stocks(scale(modeles),digits = 2)
Nous on retient l’indicateur reg_log_nrmsw_lf.
ind_retenu <- "reg_log_nrmsw_lf"
Quand on parle d’effets jours-ouvrables on distingue trois type d’effet :
un effet longueur de mois (les mois n’ont pas la même longueur)
un effet type de jour : les ventes sont généralement plus importantes le samedi que le lundi. Pour simplifier le modèle on considère parfois parfois un effet jour de la semaine vs week-end (sous entendu un lundi a le même effet qu’un mardi… jusqu’à vendredi mais pas le même effet qu’un samedi, qui a le même effet qu’un dimanche et qu’un jour ferié) : c’est ce qu’on appelle working days. Dans le cas où on distingue tous les jours de la semaine on parle de trading days.
un effet “fêtes mobiles”, souvent ce qu’on appel un effet “graduel de Pâques”. En fait Pâques ne tombe pas le même jour chaque année et Pâques a un effet certain sur la vente de chocolat. En revanche les achats de chocolat ne se font pas le jour de mais les jours avant : c’est l’effet graduel. En fonction du jour de Pâques cet effet graduel peut être sur deux mois. Pour les autres fêtes comme Noël cet effet graduel est pris en compte dans la saisonnalité
Dans notre cas on n’aura pas d’effet longueur de mois, sûrement pas d’effet fête mobile mais on peut avoir un effet type de jour.
On pourrait avoir un effet saisonnier : les tweets sont plus négatifs en hiver qu’en été. Pour tester la saisonnalité on peut faire plusieurs tests (voir https://jdemetradocumentation.github.io/JDemetra-documentation/pages/theory/Tests.html).
serie <- modeles[,ind_retenu]
serie <- ts(scale(serie),
start = start(serie),
frequency = 12)
jd2_seasonality_Friedman(serie) # test s'il y a une saisonnalité stable
## [1] 25.602451839 0.007433692
## attr(,"description")
## [1] "Chi2 with 11 degrees of freedom "
jd2_seasonality_KruskalWallis(serie) # pas de saisonnalité
## [1] 5.3987597 0.9103291
## attr(,"description")
## [1] "Chi2 with 11 degrees of freedom "
jd2_seasonality_FTest(serie) # présence de saisonnalité
## [1] 3.061297450 0.001767486
## attr(,"description")
## [1] "F with 11 degrees of freedom in the nominator and 82 degrees of freedom in the denominator"
jd2_seasonality_QSTest(serie) # pas de saisonnalité
## [1] 4.83971151 0.08893444
## attr(,"description")
## [1] "Chi2 with 2 degrees of freedom "
Ici les résultats sont mitigés :
le test de Friedman nous dit que si il y a une saisonnalité alors il y a une saisonnalité stable. S’il n’y a pas de saisonnalité alors ce test va conclure à une saisonnalité stable (tout le temps égal à 0)
Kruskal-Wallis et QS concluent à pas de saisonnalité
le Ftest conclue à une saisonnalité : de manière schématique, pour ce test on fait une régression en ajoutant une indicatrice pour chaque mois et on teste si l’ensemble des coefficients sont nuls.
Cependant plusieurs indicateurs nous semblent indiquer qu’il n’y a pas de saisonnalité marquée. Tout d’abord quand on trace les séries par mois on ne voit pas de d’évolution différente entre les mois.
AQLTools::graph_ts(serie,
diviserParPeriode = TRUE,
n_ylabel = 4, y_lab = NULL)
Quand on fait une désaisonnalisation, le modèle ARIMA qui est retenu est \(ARIMA(0,1,1)(0,0,0)\) avec aucun ordre saisonnier :
mod <- x13(serie)
mod$regarima
## y = regression model + arima (0, 1, 1, 0, 0, 0)
## Log-transformation: no
## Coefficients:
## Estimate Std. Error
## Theta(1) -0.495 0.09
##
##
## Residual standard error: 0.3424 on 93 degrees of freedom
## Log likelihood = -33.11, aic = 70.22 aicc = 70.35, bic(corrected for length) = -2.096
Par ailleurs, même si il y a une saisonnalité identifiable, c’est la composante saisonnière qui contribue le moins à la variance de la série.
mod$diagnostics$combined_test
## Non parametric tests for stable seasonality
## P.value
## Kruskall-Wallis test 0.001
## Test for the presence of seasonality assuming stability 0.000
## Evolutive seasonality test 0.422
##
## Identifiable seasonality probably present
mod$diagnostics$variance_decomposition
## Component
## Cycle 79.342875
## Seasonal 6.243428
## Irregular 16.139834
## TD & Hol. 0.000000
## Others 0.000000
## Total 101.726137
Si on trace les coefficients saisonniers par mois, même si on voit des différences c’est très faible et il y a beaucoup de bruit.
plot(mod$decomposition)
On n’observe pas d’effet jours ouvrables (on n’observe pas de régresseur), que ce soit en trading days :
spec <- x13_spec("RSA5c",
easter.enabled = FALSE,
tradingdays.leapyear = "None")
mod <- x13(serie, spec = spec)
mod$regarima
## y = regression model + arima (0, 1, 1, 0, 0, 0)
## Log-transformation: no
## Coefficients:
## Estimate Std. Error
## Theta(1) -0.495 0.09
##
##
## Residual standard error: 0.3424 on 93 degrees of freedom
## Log likelihood = -33.11, aic = 70.22 aicc = 70.35, bic(corrected for length) = -2.096
Qu’en working days :
spec <- x13_spec("RSA4c",
easter.enabled = FALSE,
tradingdays.leapyear = "None")
mod <- x13(serie, spec = spec)
mod$regarima
## y = regression model + arima (0, 1, 1, 0, 0, 0)
## Log-transformation: no
## Coefficients:
## Estimate Std. Error
## Theta(1) -0.495 0.09
##
##
## Residual standard error: 0.3424 on 93 degrees of freedom
## Log likelihood = -33.11, aic = 70.22 aicc = 70.35, bic(corrected for length) = -2.096
Bilan : pas d’effet JO, éventuellement une saisonnalité mais je ne suis pas convaincu.
Sur l’enquête Camme on voit aussi qu’il y a très peu de différences entre l’indicateur brut et CVS :
AQLTools::hc_stocks(scale(data[,1:2]),digits = 2)
donnes_calcul <- scale(ts.intersect(modeles[,ind_retenu], data))
donnes_calcul_lag <- scale(ts.intersect(modeles[,ind_retenu], data_lag))
colnames(donnes_calcul) <-
colnames(donnes_calcul_lag) <-
c("Ind_sent", "ind_synt_brut", "ind_synt_cvs",
"niv_vie_pas", "niv_vie_fut",
"chom_evol","oppor_achat", "epargne_actuelle",
"sit_fin_pas", "sit_fin_fut","cap_fut"
)
dataGraph <- ts.intersect(modeles[,ind_retenu], data[,1:2], data_lag[,1:2])
colnames(dataGraph) <- c("Indicateur sentiment",
"Camme_Brut", "Camme_CVS",
"Camme_Brut retardé", "Camme_CVS retardé")
AQLTools::hc_stocks(scale(dataGraph),digits = 2)
On va plutôt étudier l’indicateur retardé. Il y a une tendance dans les deux séries : quand on regarde les corrélations il y a donc une corrélation falacieuse (on trouve une corrélation significative). La présence d’une racine unitaire est confirmée par le test de Philips-Perron et le test KPSS :
PP.test(donnes_calcul_lag[,"Ind_sent"])
##
## Phillips-Perron Unit Root Test
##
## data: donnes_calcul_lag[, "Ind_sent"]
## Dickey-Fuller = -2.3493, Truncation lag parameter = 3, p-value = 0.4321
tseries::kpss.test(donnes_calcul_lag[,"Ind_sent"])
##
## KPSS Test for Level Stationarity
##
## data: donnes_calcul_lag[, "Ind_sent"]
## KPSS Level = 1.4805, Truncation lag parameter = 3, p-value = 0.01
PP.test(diff(donnes_calcul_lag[,"Ind_sent"],1))
##
## Phillips-Perron Unit Root Test
##
## data: diff(donnes_calcul_lag[, "Ind_sent"], 1)
## Dickey-Fuller = -18.027, Truncation lag parameter = 3, p-value = 0.01
tseries::kpss.test(diff(donnes_calcul_lag[,"Ind_sent"],1))
##
## KPSS Test for Level Stationarity
##
## data: diff(donnes_calcul_lag[, "Ind_sent"], 1)
## KPSS Level = 0.18522, Truncation lag parameter = 3, p-value = 0.1
PP.test(donnes_calcul_lag[,"ind_synt_brut"])
##
## Phillips-Perron Unit Root Test
##
## data: donnes_calcul_lag[, "ind_synt_brut"]
## Dickey-Fuller = -2.2432, Truncation lag parameter = 3, p-value = 0.4759
tseries::kpss.test(donnes_calcul_lag[,"ind_synt_brut"])
##
## KPSS Test for Level Stationarity
##
## data: donnes_calcul_lag[, "ind_synt_brut"]
## KPSS Level = 1.8588, Truncation lag parameter = 3, p-value = 0.01
PP.test(diff(donnes_calcul_lag[,"ind_synt_brut"],1))
##
## Phillips-Perron Unit Root Test
##
## data: diff(donnes_calcul_lag[, "ind_synt_brut"], 1)
## Dickey-Fuller = -8.6109, Truncation lag parameter = 3, p-value = 0.01
tseries::kpss.test(diff(donnes_calcul_lag[,"ind_synt_brut"],1))
##
## KPSS Test for Level Stationarity
##
## data: diff(donnes_calcul_lag[, "ind_synt_brut"], 1)
## KPSS Level = 0.11681, Truncation lag parameter = 3, p-value = 0.1
PP.test(donnes_calcul_lag[,"ind_synt_cvs"])
##
## Phillips-Perron Unit Root Test
##
## data: donnes_calcul_lag[, "ind_synt_cvs"]
## Dickey-Fuller = -2.2125, Truncation lag parameter = 3, p-value = 0.4886
tseries::kpss.test(donnes_calcul_lag[,"ind_synt_cvs"])
##
## KPSS Test for Level Stationarity
##
## data: donnes_calcul_lag[, "ind_synt_cvs"]
## KPSS Level = 1.888, Truncation lag parameter = 3, p-value = 0.01
PP.test(diff(donnes_calcul_lag[,"ind_synt_cvs"],1))
##
## Phillips-Perron Unit Root Test
##
## data: diff(donnes_calcul_lag[, "ind_synt_cvs"], 1)
## Dickey-Fuller = -9.4443, Truncation lag parameter = 3, p-value = 0.01
tseries::kpss.test(diff(donnes_calcul_lag[,"ind_synt_cvs"],1))
##
## KPSS Test for Level Stationarity
##
## data: diff(donnes_calcul_lag[, "ind_synt_cvs"], 1)
## KPSS Level = 0.13961, Truncation lag parameter = 3, p-value = 0.1
Il y a donc présence d’une tendance stochastique. On peut faire un test de cointégration pour voir si les séries partagent la même tendance stochastique : ce n’est pas le cas.
aTSA::coint.test(donnes_calcul_lag[,"Ind_sent"], donnes_calcul_lag[,"ind_synt_brut"],d = 0)
## Response: donnes_calcul_lag[, "Ind_sent"]
## Input: donnes_calcul_lag[, "ind_synt_brut"]
## Number of inputs: 1
## Model: y ~ X + 1
## -------------------------------
## Engle-Granger Cointegration Test
## alternative: cointegrated
##
## Type 1: no trend
## lag EG p.value
## 3.00 -2.11 0.10
## -----
## Type 2: linear trend
## lag EG p.value
## 3.00 -1.06 0.10
## -----
## Type 3: quadratic trend
## lag EG p.value
## 3.000 -0.812 0.100
## -----------
## Note: p.value = 0.01 means p.value <= 0.01
## : p.value = 0.10 means p.value >= 0.10
aTSA::coint.test(donnes_calcul_lag[,"Ind_sent"], donnes_calcul_lag[,"ind_synt_cvs"],d = 0)
## Response: donnes_calcul_lag[, "Ind_sent"]
## Input: donnes_calcul_lag[, "ind_synt_cvs"]
## Number of inputs: 1
## Model: y ~ X + 1
## -------------------------------
## Engle-Granger Cointegration Test
## alternative: cointegrated
##
## Type 1: no trend
## lag EG p.value
## 3.00 -2.18 0.10
## -----
## Type 2: linear trend
## lag EG p.value
## 3.0 -1.0 0.1
## -----
## Type 3: quadratic trend
## lag EG p.value
## 3.000 -0.869 0.100
## -----------
## Note: p.value = 0.01 means p.value <= 0.01
## : p.value = 0.10 means p.value >= 0.10
Il n’y a aucune des deux séries qui Granger Cause, je pense qu’il faut uniquement regarder le test en différence mais je laisse en niveau quand même pour info. En comparant à l’indicateur Camme CVS pas de causalité au sens de Granger
library(lmtest)
grangertest(donnes_calcul[, "Ind_sent"], donnes_calcul[, "ind_synt_cvs"], order = 1)
## Granger causality test
##
## Model 1: donnes_calcul[, "ind_synt_cvs"] ~ Lags(donnes_calcul[, "ind_synt_cvs"], 1:1) + Lags(donnes_calcul[, "Ind_sent"], 1:1)
## Model 2: donnes_calcul[, "ind_synt_cvs"] ~ Lags(donnes_calcul[, "ind_synt_cvs"], 1:1)
## Res.Df Df F Pr(>F)
## 1 92
## 2 93 -1 0.9366 0.3357
grangertest(donnes_calcul[, "ind_synt_cvs"], donnes_calcul[, "Ind_sent"], order = 1)
## Granger causality test
##
## Model 1: donnes_calcul[, "Ind_sent"] ~ Lags(donnes_calcul[, "Ind_sent"], 1:1) + Lags(donnes_calcul[, "ind_synt_cvs"], 1:1)
## Model 2: donnes_calcul[, "Ind_sent"] ~ Lags(donnes_calcul[, "Ind_sent"], 1:1)
## Res.Df Df F Pr(>F)
## 1 92
## 2 93 -1 0.0909 0.7637
grangertest(diff(donnes_calcul[, "Ind_sent"]), diff(donnes_calcul[, "ind_synt_cvs"]), order = 1)
## Granger causality test
##
## Model 1: diff(donnes_calcul[, "ind_synt_cvs"]) ~ Lags(diff(donnes_calcul[, "ind_synt_cvs"]), 1:1) + Lags(diff(donnes_calcul[, "Ind_sent"]), 1:1)
## Model 2: diff(donnes_calcul[, "ind_synt_cvs"]) ~ Lags(diff(donnes_calcul[, "ind_synt_cvs"]), 1:1)
## Res.Df Df F Pr(>F)
## 1 91
## 2 92 -1 2.3687 0.1273
grangertest(diff(donnes_calcul[, "ind_synt_cvs"]), diff(donnes_calcul[, "Ind_sent"]), order = 1)
## Granger causality test
##
## Model 1: diff(donnes_calcul[, "Ind_sent"]) ~ Lags(diff(donnes_calcul[, "Ind_sent"]), 1:1) + Lags(diff(donnes_calcul[, "ind_synt_cvs"]), 1:1)
## Model 2: diff(donnes_calcul[, "Ind_sent"]) ~ Lags(diff(donnes_calcul[, "Ind_sent"]), 1:1)
## Res.Df Df F Pr(>F)
## 1 91
## 2 92 -1 1.7004 0.1955
En comparant à l’indicateur Camme brut, on observe une causalité à 5 % : note indicateur cause instannément au sens de Granger l’indicateur Brut de l’enquête Camme (non retardé).
grangertest(donnes_calcul[, "Ind_sent"], donnes_calcul[, "ind_synt_brut"], order = 1)
## Granger causality test
##
## Model 1: donnes_calcul[, "ind_synt_brut"] ~ Lags(donnes_calcul[, "ind_synt_brut"], 1:1) + Lags(donnes_calcul[, "Ind_sent"], 1:1)
## Model 2: donnes_calcul[, "ind_synt_brut"] ~ Lags(donnes_calcul[, "ind_synt_brut"], 1:1)
## Res.Df Df F Pr(>F)
## 1 92
## 2 93 -1 0.1764 0.6755
grangertest(donnes_calcul[, "ind_synt_brut"], donnes_calcul[, "Ind_sent"], order = 1)
## Granger causality test
##
## Model 1: donnes_calcul[, "Ind_sent"] ~ Lags(donnes_calcul[, "Ind_sent"], 1:1) + Lags(donnes_calcul[, "ind_synt_brut"], 1:1)
## Model 2: donnes_calcul[, "Ind_sent"] ~ Lags(donnes_calcul[, "Ind_sent"], 1:1)
## Res.Df Df F Pr(>F)
## 1 92
## 2 93 -1 0.1191 0.7308
grangertest(diff(donnes_calcul[, "Ind_sent"]), diff(donnes_calcul[, "ind_synt_brut"]), order = 1)
## Granger causality test
##
## Model 1: diff(donnes_calcul[, "ind_synt_brut"]) ~ Lags(diff(donnes_calcul[, "ind_synt_brut"]), 1:1) + Lags(diff(donnes_calcul[, "Ind_sent"]), 1:1)
## Model 2: diff(donnes_calcul[, "ind_synt_brut"]) ~ Lags(diff(donnes_calcul[, "ind_synt_brut"]), 1:1)
## Res.Df Df F Pr(>F)
## 1 91
## 2 92 -1 6.5803 0.01195 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
grangertest(diff(donnes_calcul[, "ind_synt_brut"]), diff(donnes_calcul[, "Ind_sent"]), order = 1)
## Granger causality test
##
## Model 1: diff(donnes_calcul[, "Ind_sent"]) ~ Lags(diff(donnes_calcul[, "Ind_sent"]), 1:1) + Lags(diff(donnes_calcul[, "ind_synt_brut"]), 1:1)
## Model 2: diff(donnes_calcul[, "Ind_sent"]) ~ Lags(diff(donnes_calcul[, "Ind_sent"]), 1:1)
## Res.Df Df F Pr(>F)
## 1 91
## 2 92 -1 0 0.9967
Quand on prend l’indicateur Camme retardé, on trouve que l’indicateur Camme brut granger cause notre indicateur au seuil de 10 %.
grangertest(diff(donnes_calcul_lag[, "ind_synt_brut"]), diff(donnes_calcul_lag[, "Ind_sent"]), order = 1)
## Granger causality test
##
## Model 1: diff(donnes_calcul_lag[, "Ind_sent"]) ~ Lags(diff(donnes_calcul_lag[, "Ind_sent"]), 1:1) + Lags(diff(donnes_calcul_lag[, "ind_synt_brut"]), 1:1)
## Model 2: diff(donnes_calcul_lag[, "Ind_sent"]) ~ Lags(diff(donnes_calcul_lag[, "Ind_sent"]), 1:1)
## Res.Df Df F Pr(>F)
## 1 91
## 2 92 -1 3.5984 0.06101 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Bilan notre indicateur de sentiment permettrait de prévoir l’enquête Camme
Spoiler alert aucune corrélation significative. Pas de différence quand on regarde les séries retardées.
library(corrplot)
library(Hmisc)
M <- rcorr(diff(donnes_calcul), type = "pearson")
M_lag <- rcorr(diff(donnes_calcul), type = "pearson")
Les p-values des corrélation avec notre indicateur de sentiment
round(M$P[-1,1],3)
## ind_synt_brut ind_synt_cvs niv_vie_pas niv_vie_fut
## 0.578 0.716 0.233 0.294
## chom_evol oppor_achat epargne_actuelle sit_fin_pas
## 0.424 0.119 0.650 0.245
## sit_fin_fut cap_fut
## 0.546 0.974
round(M_lag$P[-1,1],3)
## ind_synt_brut ind_synt_cvs niv_vie_pas niv_vie_fut
## 0.578 0.716 0.233 0.294
## chom_evol oppor_achat epargne_actuelle sit_fin_pas
## 0.424 0.119 0.650 0.245
## sit_fin_fut cap_fut
## 0.546 0.974
Série sans retard :
corrplot(M$r, method = "number")
corrplot(M$r, method = "ellipse")
Séries retardées :
corrplot(M_lag$r, method = "number")
corrplot(M_lag$r, method = "ellipse")
M <- rcorr(diff(donnes_calcul), type = "spearman")
M_lag <- rcorr(diff(donnes_calcul), type = "spearman")
Les p-values des corrélation avec notre indicateur de sentiment
round(M$P[-1,1],3)
## ind_synt_brut ind_synt_cvs niv_vie_pas niv_vie_fut
## 0.767 0.424 0.149 0.179
## chom_evol oppor_achat epargne_actuelle sit_fin_pas
## 0.861 0.059 0.279 0.280
## sit_fin_fut cap_fut
## 0.836 0.968
round(M_lag$P[-1,1],3)
## ind_synt_brut ind_synt_cvs niv_vie_pas niv_vie_fut
## 0.767 0.424 0.149 0.179
## chom_evol oppor_achat epargne_actuelle sit_fin_pas
## 0.861 0.059 0.279 0.280
## sit_fin_fut cap_fut
## 0.836 0.968
Série sans retard :
corrplot(M$r, method = "number")
corrplot(M$r, method = "ellipse")
Séries retardées :
corrplot(M_lag$r, method = "number")
corrplot(M_lag$r, method = "ellipse")
Je fais la même chose sur les séries non différenciées mais je pense qu’il ne faut pas regarder les résultats
M <- rcorr(donnes_calcul, type = "pearson")
M_lag <- rcorr(donnes_calcul, type = "pearson")
Les p-values des corrélation avec notre indicateur de sentiment
round(M$P[-1,1],3)
## ind_synt_brut ind_synt_cvs niv_vie_pas niv_vie_fut
## 0.001 0.001 0.000 0.001
## chom_evol oppor_achat epargne_actuelle sit_fin_pas
## 0.100 0.004 0.000 0.141
## sit_fin_fut cap_fut
## 0.000 0.006
round(M_lag$P[-1,1],3)
## ind_synt_brut ind_synt_cvs niv_vie_pas niv_vie_fut
## 0.001 0.001 0.000 0.001
## chom_evol oppor_achat epargne_actuelle sit_fin_pas
## 0.100 0.004 0.000 0.141
## sit_fin_fut cap_fut
## 0.000 0.006
Série sans retard :
corrplot(M$r, method = "number")
corrplot(M$r, method = "ellipse")
Séries retardées :
corrplot(M_lag$r, method = "number")
corrplot(M_lag$r, method = "ellipse")
M <- rcorr(donnes_calcul, type = "spearman")
M_lag <- rcorr(donnes_calcul, type = "spearman")
Les p-values des corrélation avec notre indicateur de sentiment
round(M$P[-1,1],3)
## ind_synt_brut ind_synt_cvs niv_vie_pas niv_vie_fut
## 0.035 0.026 0.017 0.013
## chom_evol oppor_achat epargne_actuelle sit_fin_pas
## 0.317 0.170 0.005 0.883
## sit_fin_fut cap_fut
## 0.006 0.029
round(M_lag$P[-1,1],3)
## ind_synt_brut ind_synt_cvs niv_vie_pas niv_vie_fut
## 0.035 0.026 0.017 0.013
## chom_evol oppor_achat epargne_actuelle sit_fin_pas
## 0.317 0.170 0.005 0.883
## sit_fin_fut cap_fut
## 0.006 0.029
Série sans retard :
corrplot(M$r, method = "number")
corrplot(M$r, method = "ellipse")
Séries retardées :
corrplot(M_lag$r, method = "number")
corrplot(M_lag$r, method = "ellipse")
Pour essayer de comprendre les évolutions de l’enquête Camme, on peut regarder les contributions de chaque solde à son évolution. C’est pas très lisible mais au cas où :
J’ai rien trouvé mais j’ai pas tout cherché, j’ai fait une petite recherche des événements. Ma méthodologie : si il y a quelque choses que je pense venir d’un événement, je regarde les tweets, ctrl+F pour voir si je trouve beaucoup d’occurences. Généralement rien. Je n’ai pas mis tous les événements sportifs.